/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CONTROLES;

import MODELOS.Empleado;
import MODELOS.HuellaDigital;
import MODELOS.Permisos;
import MODELOS.Usuario;
import UTILITARIOS.EncriptarCadena;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Administrador
 */
public class ControlEmpleado {

    private Empleado empNuevo = new Empleado();
    
    private ArrayList<Empleado> listaEmp = new ArrayList<Empleado>();
    

     

 
    public ControlEmpleado(){
        
    }

    public ArrayList<Empleado> getListaEmp() {

        listaEmp = getEmpleados();

        return listaEmp;
    }

    public Empleado getEmpNuevo() {
        return empNuevo;
    }

    public void setEmpNuevo(Empleado empNuevo) {
        this.empNuevo = empNuevo;
    }

    public boolean estaRegistradoNit(int nit){
        boolean resp=false;
        Conexion conexion = new Conexion();
        try {
            Connection conex = conexion.getConexion();
            PreparedStatement psUs = conex.prepareStatement("select * from empleado where nit_empleado='"+nit+"'");
            ResultSet result=psUs.executeQuery();
            if(result.next()){
                resp=true;
                System.out.println("Ya existe: "+nit);

            }
            else resp=false;
        } catch (SQLException ex) {
             System.out.println("Error nit igual : "+ex.getLocalizedMessage());
        }

        return resp;
    }

    public void guardarEmpleado(Empleado e) {
        Conexion conection = new Conexion();

        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("INSERT INTO empleado(id_empleado,id_sucursal,nombre_empleado,apellido_emp,ciudad_empleado,telefono_movil,telefono_casa,nit_empleado,genero,fecha_nacimiento,direccion_emp,estado_empleado,email_emp,id_empleo)VALUES "+ "(nextval('empleado_id_empleado_seq'),'"+e.getIdSucursal()+"','"+e.getNombreEmpleado().toUpperCase()+"','"+e.getApellidoEmp().toUpperCase()+"','"+e.getCiudadEmp().toUpperCase()+"','"+e.getCelularEmp()+"','"+e.getTelefonoEmp()+"','"+e.getNitEmp()+"','"+e.getGeneroEmp().toUpperCase()+"','"+e.getFechaNacimiento()+"','"+e.getDireccionEmp().toUpperCase()+"','"+e.isEstadoEmp()+"','"+e.getEmailEmp()+"','"+e.getIdEmpleo()+"')");

            
            ps.executeUpdate();
            ps.close();
    } catch (SQLException em) {
            
            System.out.println("error al insertar al empleado "+em.getLocalizedMessage() );

    }
  }

    public void ActualizarEmpleado(Empleado e) {
        Conexion conection = new Conexion();
        System.out.println("empleado :"+e.getIdEmpleado());
        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("UPDATE empleado SET id_empleado='"+e.getIdEmpleado()+"', id_sucursal='"+e.getIdSucursal()+"',nombre_empleado='"+e.getNombreEmpleado()+"',apellido_emp='"+e.getApellidoEmp()+"',ciudad_empleado='"+e.getCiudadEmp()+"',telefono_movil='"+e.getCelularEmp()+"',telefono_casa='"+e.getTelefonoEmp()+"',nit_empleado='"+e.getNitEmp()+"',genero='"+e.getGeneroEmp()+"',fecha_nacimiento='"+e.getFechaNacimiento()+"',direccion_emp='"+e.getDireccionEmp()+"',estado_empleado='"+e.isEstadoEmp()+"',email_emp='"+e.getEmailEmp()+"',id_empleo='"+e.getIdEmpleo()+"' WHERE id_empleado = '"+e.getIdEmpleado()+"';");


            ps.executeUpdate();
            ps.close();
    } catch (SQLException em) {

            System.out.println("error al actualizar al empleado "+em.getLocalizedMessage() );

    }
  }

    public void nombreEm(String algo){
        System.out.println("asasadasdas"+algo);
    }

    public String[] nombresEmp()
    {
        String lista[]=new String[getEmpleados().size()];

         ControlEmpleado c = new ControlEmpleado();

        for(int i=0; i<c.getListaEmp().size(); i++ )

        lista[i]=c.getListaEmp().get(i).getIdEmpleado()+"-"+c.getListaEmp().get(i).getNombreEmpleado().toString()+" "+c.getListaEmp().get(i).getApellidoEmp().toString()+" "+c.getListaEmp().get(i);
        

    return lista;
        
    }

    public ArrayList<Empleado> getEmpleados(){
       Conexion conection = new Conexion();
       ArrayList<Empleado> res = new ArrayList<Empleado>();
       Empleado emplea;
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from empleado ORDER BY nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){

                emplea= new Empleado();
                emplea.setIdEmpleado(respEmp.getInt(1));
                emplea.setIdSucursal(respEmp.getInt(2));
                emplea.setNombreEmpleado(respEmp.getString(3));
                emplea.setApellidoEmp(respEmp.getString(4));
                emplea.setCiudadEmp(respEmp.getString(5));
                emplea.setCelularEmp(respEmp.getInt(6));
                emplea.setTelefonoEmp(respEmp.getInt(7));
                emplea.setNitEmp(respEmp.getInt(8));
                emplea.setGeneroEmp(respEmp.getString(9));
                emplea.setFechaNacimiento(respEmp.getDate(10));
                emplea.setDireccionEmp(respEmp.getString(11));
                emplea.setEstadoEmp(respEmp.getBoolean(12));
                emplea.setEmailEmp(respEmp.getString(13));
                emplea.setIdEmpleo(respEmp.getInt(14));
                

                res.add(emplea);

            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de empleados " + e.getLocalizedMessage());
        }

return res;
}

    public ArrayList<Empleado> getEmpleadosSucursal(int idSucursal){
       Conexion conection = new Conexion();
       ArrayList<Empleado> res = new ArrayList<Empleado>();
       Empleado emplea;
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from empleado where id_sucursal='"+idSucursal+"' ORDER BY nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){

                emplea= new Empleado();
                emplea.setIdEmpleado(respEmp.getInt(1));
                emplea.setIdSucursal(respEmp.getInt(2));
                emplea.setNombreEmpleado(respEmp.getString(3));
                emplea.setApellidoEmp(respEmp.getString(4));
                emplea.setCiudadEmp(respEmp.getString(5));
                emplea.setCelularEmp(respEmp.getInt(6));
                emplea.setTelefonoEmp(respEmp.getInt(7));
                emplea.setNitEmp(respEmp.getInt(8));
                emplea.setGeneroEmp(respEmp.getString(9));
                emplea.setFechaNacimiento(respEmp.getDate(10));
                emplea.setDireccionEmp(respEmp.getString(11));
                emplea.setEstadoEmp(respEmp.getBoolean(12));
                emplea.setEmailEmp(respEmp.getString(13));
                emplea.setIdEmpleo(respEmp.getInt(14));


                res.add(emplea);

            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de empleados de cada sucursal " + e.getLocalizedMessage());
        }

        return res;
        }

    public ArrayList<Empleado> getEmpleadosSucursalSueldo(int idSucursal){
       Conexion conection = new Conexion();
       ArrayList<Empleado> res = new ArrayList<Empleado>();
       Empleado emplea;
       String token = new EncriptarCadena().Encriptar("nfn inversiones", "NOINGRESAR", true);
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select * from empleado where id_sucursal = '"+idSucursal+"' and estado_empleado = true and id_empleado != '1' ORDER BY nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){

                emplea= new Empleado();
                emplea.setIdEmpleado(respEmp.getInt(1));
                emplea.setIdSucursal(respEmp.getInt(2));
                emplea.setNombreEmpleado(respEmp.getString(3));
                emplea.setApellidoEmp(respEmp.getString(4));
                emplea.setCiudadEmp(respEmp.getString(5));
                emplea.setCelularEmp(respEmp.getInt(6));
                emplea.setTelefonoEmp(respEmp.getInt(7));
                emplea.setNitEmp(respEmp.getInt(8));
                emplea.setGeneroEmp(respEmp.getString(9));
                emplea.setFechaNacimiento(respEmp.getDate(10));
                emplea.setDireccionEmp(respEmp.getString(11));
                emplea.setEstadoEmp(respEmp.getBoolean(12));
                emplea.setEmailEmp(respEmp.getString(13));
                emplea.setIdEmpleo(respEmp.getInt(14));


                res.add(emplea);

            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de empleados de cada sucursal " + e.getLocalizedMessage());
        }

        return res;
        }

    

    public ArrayList<Permisos> getUsuariosPermisos(int idSucursal){
       Conexion conection = new Conexion();
       ArrayList<Permisos> res = new ArrayList<Permisos>();
       String token = new EncriptarCadena().Encriptar("nfn inversiones", "NOINGRESAR", true);
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select u.id_usuario, e.nombre_empleado, e.apellido_emp, u.nombre_usu, u.permiso from usuario as u,empleado as e where u.id_empleado = e.id_empleado and u.token = '"+token+"' and e.id_sucursal='"+idSucursal+"' ORDER BY nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                Permisos p = new Permisos();

                p.setIdUs(respEmp.getInt(1));
                p.setNombre(respEmp.getString(2));
                p.setApellido(respEmp.getString(3));
                p.setNombreUs(respEmp.getString(4));
                p.setPermiso(respEmp.getBoolean(5));
                
                
               
                res.add(p);

            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de usuarios para permisos " + e.getLocalizedMessage());
        }

        return res;
        }

    public ArrayList<Permisos> getAdminPermisos(){
       Conexion conection = new Conexion();
       ArrayList<Permisos> res = new ArrayList<Permisos>();
       String token = new EncriptarCadena().Encriptar("nfn inversiones", "NOINGRESAR", true);
    try{
            Connection conectado = conection.getConexion();

            PreparedStatement psc = conectado.prepareStatement("select u.id_usuario, e.nombre_empleado, e.apellido_emp, u.nombre_usu, u.permiso from usuario as u,empleado as e where u.id_empleado = e.id_empleado and u.tipo_usuario='ADMINISTRADOR' and u.id_usuario != 1 ORDER BY nombre_empleado ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                Permisos p = new Permisos();

                p.setIdUs(respEmp.getInt(1));
                p.setNombre(respEmp.getString(2));
                p.setApellido(respEmp.getString(3));
                p.setNombreUs(respEmp.getString(4));
                p.setPermiso(respEmp.getBoolean(5));



                res.add(p);

            }
        }
            catch (SQLException e){
            System.out.println("error al recuperar lista de usuarios para permisos " + e.getLocalizedMessage());
        }

        return res;
        }

   

    public int getUltimoIdEmpleado(){
    int idUltimo=0;
    Conexion conexion=new Conexion();

    try {
            Connection conectado = conexion.getConexion();
            PreparedStatement psU = conectado.prepareStatement("select id_empleado from empleado order by id_empleado desc limit 1"+";");
            ResultSet resUltimo = psU.executeQuery();

            while(resUltimo.next()){
            idUltimo = resUltimo.getInt(1);

            }
        } catch (SQLException ex) {
            System.out.println("Ocurrio un error al obtener id del usuario" +ex.getLocalizedMessage());
        }
    return idUltimo;
  }


    public Empleado dameEmpleado(int idEmpleado) {
        Conexion conection = new Conexion();
        Empleado emplea = new Empleado();
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from empleado where id_empleado ='"+idEmpleado+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                emplea.setIdEmpleado(respA.getInt(1));
                emplea.setIdSucursal(respA.getInt(2));
                emplea.setNombreEmpleado(respA.getString(3));
                emplea.setApellidoEmp(respA.getString(4));
                emplea.setCiudadEmp(respA.getString(5));
                emplea.setCelularEmp(respA.getInt(6));
                emplea.setTelefonoEmp(respA.getInt(7));
                emplea.setNitEmp(respA.getInt(8));
                emplea.setGeneroEmp(respA.getString(9));
                emplea.setFechaNacimiento(respA.getDate(10));
                emplea.setDireccionEmp(respA.getString(11));
                emplea.setEstadoEmp(respA.getBoolean(12));
                emplea.setEmailEmp(respA.getString(13));
                emplea.setIdEmpleo(respA.getInt(14));


            }

        } catch (SQLException ex) {
            System.out.println("Error buscar empleado por su id : "+ex.getLocalizedMessage());
        }
    return emplea;
    }

    public Empleado dameEmpleadoCi(int ciEmp) {
        Conexion conection = new Conexion();
        Empleado emplea = new Empleado();
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from empleado where nit_empleado ='"+ciEmp+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                emplea.setIdEmpleado(respA.getInt(1));
                emplea.setIdSucursal(respA.getInt(2));
                emplea.setNombreEmpleado(respA.getString(3));
                emplea.setApellidoEmp(respA.getString(4));
                emplea.setCiudadEmp(respA.getString(5));
                emplea.setCelularEmp(respA.getInt(6));
                emplea.setTelefonoEmp(respA.getInt(7));
                emplea.setNitEmp(respA.getInt(8));
                emplea.setGeneroEmp(respA.getString(9));
                emplea.setFechaNacimiento(respA.getDate(10));
                emplea.setDireccionEmp(respA.getString(11));
                emplea.setEstadoEmp(respA.getBoolean(12));
                emplea.setEmailEmp(respA.getString(13));
                emplea.setIdEmpleo(respA.getInt(14));


            }

        } catch (SQLException ex) {
            System.out.println("Error buscar usuario por su carnet : "+ex.getLocalizedMessage());
        }



    return emplea;
    }

    
    public static void main (String args [])
    {
        ControlEmpleado c = new ControlEmpleado();
        
        System.out.println("1 :"+c.getUsuariosPermisos(1).get(0).getNombreUs());
    }

    

    
}
